package com.foreveross.law.base.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * com.csair.udp.common.dao.CrudDao.java
 * </p>
 * 
 * @author liaocw(mail)
 * @version $Revision$ $Date$
 * @Modified by liaocw(mail) description
 * @purpose 抽象Dao层基类 提供一些简便方法:基本的CRUD方法
 */
public interface CrudRepository<T, ID extends Serializable> extends BaseRepository<T> {
	/**
	 * 
	 * get(根据主键获取对象)
	 * 
	 * @param id
	 * @return
	 */
	T get(Class<T> clazz, Serializable id);

	/**
	 * 
	 * save(保存对象)
	 * 
	 * @param entity
	 * @return
	 */
	ID save(Class<T> clazz, T entity);

	/**
	 * 
	 * update(更新对象)
	 * 
	 * @param entity
	 */
	void update(Class<T> clazz, T entity);

	/**
	 * 
	 * delete(根据主键删除对象)
	 * 
	 * @param id
	 */
	void delete(Class<T> clazz, ID id);

	/**
	 * 
	 * findAll(获取所有记录)
	 * 
	 * @param clazz
	 * @return
	 */
	List<T> findAll(Class<T> clazz);
	
	/**
	 * 
	 * findAll(不分页查询)
	 * 
	 * @param clazz
	 * @param param
	 * @return
	 */
	List<T> findAll(Class<T> clazz , Map<String,Object> param);

	/**
	 * 
	 * getCount(获取记录总数)
	 * 
	 * @param clazz
	 * @param parameter
	 * @return
	 */
	public Long getCount(Class<T> clazz, Map<String, ?> parameter);

	public String getFindByPrimaryKeyQuery(Class<T> clazz);

	public String getInsertQuery(Class<T> clazz);

	public String getUpdateQuery(Class<T> clazz);

	public String getDeleteQuery(Class<T> clazz);

	public String getPageQuery(Class<T> clazz);

	public String getPageCountQuery(Class<T> clazz);

}
